package classes;


import java.util.SortedSet;
import java.util.TreeSet;

public class Mes implements Comparable<Mes>{
	
	private Integer numMes;	
	private SortedSet <Dia> llistaDies;
	
	
	public Mes(Integer numMes) {
		super();
		this.numMes = numMes;
		this.llistaDies = new TreeSet <Dia>();
	}


	public void afegirDia(Dia dia) {
		// TODO comprobar excepcions
		
		llistaDies.add(dia);
		
	}


	public Integer getNumMes() {
		return numMes;
	}
	public Dia getDia(Dia compararDia){
		Dia auxDia=null;
		
		for (Dia dia : llistaDies){
			if (dia.equals(compararDia)){
				auxDia= dia;
				break;
			}
		}
		
		return auxDia;
	}
	
	
	public Dia getDia(int compararDia){
		Dia auxDia=null;
		
		for (Dia dia : llistaDies){
			if (dia.getNumDia()==compararDia){
				auxDia= dia;
				break;
			}
		}
		
		return auxDia;
	}
	public SortedSet<Dia> getLlistaDies() {
		return llistaDies;
	}


	@Override
	public int compareTo(Mes o) {
		int numAComparar= o.getNumMes();
		
		
		if(numMes<numAComparar){
			return -1;
		}else if(numMes>numAComparar){
			return 1;
		}else{	
			return 0;
		}
	}
	
	
	
	@Override
	public boolean equals(Object auxMes) {
		// TODO Auto-generated method stub
		return(((Mes)auxMes).getNumMes().equals(this.getNumMes()));
	}


	@Override
	public String toString() {
		String auxString="";
		
		for (Dia dia : llistaDies){
			
			auxString+="Dia : " + dia.getNumDia() + "\n";
			auxString+= dia.toString();
		}
		
		
		return auxString;
	}


	public int afegirActivitatPlantillaMes(Activitat activitat,
			Mes plantillaMes, Dia plantillaHores) {
		int contadorActivitatsAfegides=0;
		
		int contadorDia=0;
		
		boolean trobat=false;
		
		if (llistaDies==null){
			llistaDies=plantillaMes.getLlistaDies();
			
			for (Dia auxDia : this.llistaDies){
				auxDia.afegirActivitatPlantillaHores(activitat, plantillaHores);
				contadorDia+=auxDia.getLlistaHores().size();
			}
			
			return contadorDia;
		}	
			
			
		for (Dia dia : plantillaMes.getLlistaDies()){
			contadorDia=0;
			trobat=false;
			for (Dia auxDia : this.llistaDies){
				if (dia.equals(auxDia)){
					contadorDia= auxDia.afegirActivitatPlantillaHores(activitat,plantillaHores);
					if (contadorDia>0){
						contadorActivitatsAfegides+=contadorDia;
					}else{
						if (!activitat.getClass().equals(ActivitatTancat.class)) { // si no es activitat tancada: retorna 0 i acaba el proces
							return 0;
						}
					}
					
					trobat=true;
					break;
				}
			}
			if (!trobat){
				contadorActivitatsAfegides+= dia.afegirActivitatPlantillaHores(activitat,plantillaHores);
				this.afegirDia(dia);
			}
		}
		
		return contadorActivitatsAfegides;
	}


	public void setNumMes(int mes) {
		this.numMes = numMes;
		
	}


	public void setMes(Mes plantillaMes) {
		this.llistaDies=plantillaMes.getLlistaDies();
		this.numMes=plantillaMes.getNumMes();
		
	}


	public void merge(Mes auxAfegir) {
		boolean trobat=false;
		for (Dia auxNouAfegir : auxAfegir.llistaDies){
			trobat=false;
			for (Dia auxOriginal : this.llistaDies){
			
				if (auxOriginal.equals(auxNouAfegir)){
					auxOriginal.merge(auxNouAfegir);
					trobat=true;
				}
			}
			if (!trobat){
				this.afegirDia(auxNouAfegir);
			}
			
		}
		
	}

	
	
	
	
}


